-include ../tools.mk

# Modelled after compile-fail/changing-crates test, but this one puts
# more than one (mismatching) candidate crate into the search path,
# which did not appear directly expressible in compile-fail/aux-build
# infrastructure.
#
# Note that we move the built libraries into target direcrtories rather than
# use the `--out-dir` option because the `../tools.mk` file already bakes a
# use of `--out-dir` into the definition of $(RUSTC).

A1=$(TMPDIR)/a1
A2=$(TMPDIR)/a2
A3=$(TMPDIR)/a3

# A hack to match distinct lines of output from a single run.
LOG=$(TMPDIR)/log.txt

all:
	mkdir -p $(A1) $(A2) $(A3)
	$(RUSTC) --crate-type=rlib crateA1.rs
	mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A1)
	$(RUSTC) --crate-type=rlib -L $(A1) crateB.rs
	$(RUSTC) --crate-type=rlib crateA2.rs
	mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A2)
	$(RUSTC) --crate-type=rlib crateA3.rs
	mv $(TMPDIR)/$(call RLIB_GLOB,crateA) $(A3)
	# Ensure crateC fails to compile since A1 is "missing" and A2/A3 hashes do not match
	$(RUSTC) -L $(A2) -L $(A3) crateC.rs >$(LOG) 2>&1 || true
	grep "found possibly newer version of crate \`crateA\` which \`crateB\` depends on" $(LOG)
	grep "note: perhaps that crate needs to be recompiled?" $(LOG)
	grep "note: crate \`crateA\` path #1:" $(LOG)
	grep "note: crate \`crateA\` path #2:" $(LOG)
	grep "note: crate \`crateB\` path #1:" $(LOG)
